\documentclass[11pt, letterpaper]{article}
\usepackage{graphicx}
\title{Lab T report}
\begin{document}
\maketitle
\section{Administrative}

Team names: Jason Kilman, Jon Hermes\\
Team uteids: jfk464, jph646\\
Slip days previously used: 1, 0\\
Slip days used this project: 2, 2\\
Slip days remaining: 0, 1\\

\section{Basic synchronization}

{\em An alarm thread runs which decides which processes
  are allowed to send data according to the given scheduler.
  In a loop, it schedules the next process and then sleeps
  for a calculated amount of time in order to limit the bandwidth.
  \\
  A threadsafe stats object counts up the bytes sent for each
  flow (process).
  }

\subsection{Evaluation}

\centerline{\includegraphics[width=3in]{plot1}}

{\em This shows bandwidth across the network with no
  scheduler in place. Each process runs haphazardly at wire speed
  and completes as fast as possible. 
  }


\centerline{\includegraphics[width=3in]{plot1b}}

{\em As flows finish, excess bandwidth is given to the remaning flows 
  for work conservation.
  }
\\

\section{MaxNWScheduler}

{\em For a MaxNetworkScheduler, a limit is imposed that the aggregate
  bandwidth for all flows cannot exceed. Each flow is given an equal
  share of the bandwidth. In order to do this, each flow first asks
  permission to send (blocking) from the scheduler along with how much
  bandwidth they need to send. The scheduler will wait until that amount
  has been calculated, and then let one thread send at a time.
  }

{\em Discuss your testing strategy -- what tests did you run, what were the
}

{\em Note that the limit is not a hard limit, but rather an average limit.
  Some threads will send more up front and then have to wait longer and
  others will send many small chunks and wait less, but the aggregate average 
  doesn't exceed the limit. 
  }


\subsection{Evaluation}

\centerline{\includegraphics[width=3in]{plot2}}

{\em There's 1MBps available bandwidth across 5 threads, so
  each is expected to average 200kBps, as shown.
  }


\centerline{\includegraphics[width=3in]{plot2b}}

{\em MaxNWScheduler is not work conserving, so as flows finish
  the remaining flows are still limited.
  }


\section{STFQNWScheduler}

{\em A StartTimeFairQueueing Network Scheduler has both desirable properties
 from the examples above (work conservation and bandwidth limiting) as well
 as the ability to weight certain processes higher than others. Like MaxNWScheduler
 each flow asks permission from the scheduler before sending, but the scheduler
 is much smarter about allowing a thread to proceed. It guarantees that no flow
 dominates the bandwidth by serializing their execution through start and finish
 tags. Additionally, a virtual time counter disassociates the scheduling timer from
 the clock timer, which gives work conservation.
 }

{\em Discuss your testing strategy -- what tests did you run, what were the
your results.}

{\em Anything the TA needs to know about when grading part 2? Known bugs?
Interesting design points?}


\subsection{Evaluation}

\centerline{\includegraphics[width=3in]{plot3}}

{\em Explain graph; identify/explain any
  interesting/unexpected/important features}

\centerline{\includegraphics[width=3in]{plot3b}}

{\em Explain graph; identify/explain any
  interesting/unexpected/important features}

{\em Insert any other graphs or test results along with
  discussion/explanation here}





\end{document}


